前言
前面幾天,我們學習了 Linux 的檔案操作,包括使用 find 搜尋檔案,以及使用 ln -s 建立 Symbolic Link。
不過,當我們遇到不熟悉的程式時,光知道怎麼執行還不夠。有時候,即使程式路徑正確,如果沒有提供正確的參數,程式還是無法完成我們想要的操作。
因此,今天開始進入 pwn.college 的新單元:Learning from Documentation(從文件學習)。
這個單元要教我們如何透過程式的使用說明,了解程式需要哪些參數,以及應該如何正確執行。
Command-line Arguments,中文通常稱為「命令列參數」,是指執行程式時,額外傳遞給程式的資訊。
例如,之前我們學過的 ls 可以列出目前目錄中的內容。
如果加上 -a 就能列出包含隱藏檔案在內的目錄內容。
這裡的 -a 就是一個參數,它會影響程式的執行方式。
我們也可以把它理解成程式名稱 + 參數
例如 ls -a
其中:
ls:要執行的程式。-a:告訴程式要顯示隱藏檔案。不同程式支援的參數不一樣,因此不能隨意猜測,而是應該先閱讀使用說明。
Documentation 就是程式的文件或使用說明,通常會告訴我們:
--giveflag,但我們沒有提供這個參數,就可能無法完成題目。題目:Learning From Documentation
今天的題目指定要執行的程式是 /challenge/challenge
題目也直接提供了這個程式的使用說明 To properly run this program, you will need to pass it the argument of --giveflag.
意思是要正確執行這個程式,必須傳入 --giveflag 這個參數。
因此,我們不需要猜測參數,也不需要修改任何檔案,只要按照文件提供的資訊執行即可。
我在終端機輸入
程式成功取得 Flag!
這個結果代表我們提供的參數符合程式的要求。
將指令拆開來看
/challenge/challenge --giveflag
│ │
▼ ▼
執行的程式 指定的參數
程式接收到 --giveflag 後,確認參數正確,便輸出了 Flag。
今天的題目雖然比前幾天簡單,但我認為這是一個很重要的基礎觀念。以前遇到不熟悉的指令時,可能會先嘗試不同的寫法,看看能不能成功執行。但透過今天的練習,我了解到,閱讀文件其實是解決問題最直接的方法之一。程式的參數通常會影響它的行為,而不同工具也可能有完全不同的參數規則。如果沒有先確認使用方式,就可能花很多時間嘗試錯誤的指令。這次只需要加上 --giveflag 就能成功取得 Flag,但真正值得記住的是,先理解程式要求,再根據文件提供的資訊執行。這個習慣不只適用於 Linux,也能運用在未來使用資安工具、分析程式或進行系統除錯時。